<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 定义一个变量 
        // var a;
        // // 给a变量赋值
        // a = 10;

        // 定义一个a变量然后赋值为10；
        // var a = 10;
        // // 再赋值: 会覆盖之前变量的值；
        // a = 20;
        // function  fn1() {
        //     // 在函数内部定义 的变量a
        //     var a;
        //     a = 20;
        //     console.log(a);
        // }
        // fn1();

        // 赋值规则：先赋值给本作用域下的定义的变量，如果没有他会向上查找赋值；
        // var a;
        // function  fn1() {
        //     // 在函数内部定义 的变量a
        //     // var a;
        //     a = 20;
        //     console.log(a);
        // }
        // fn1();


        // function fn1() {
        //     var a;
        //     function fn2() {
        //         // var a;
        //         a = 10;
        //         console.log(a);
        //     }
        //     fn2();
        //     console.log(a);
        // }
        // fn1();

        // 总结：赋值规则：变量赋值会先给本作用域内变量赋值，如果本作用域没有改变量，那么会继续向上查找赋值，直到找到全局作用域范围，最终赋值给全局作用域变量；
        // var num = 5;

        // function fn() {
        //     // 这种写法，不建议写；
        //     // 不要过多的定义全局变量，特别是  num = 10;这种。
        //     // 变量污染；
        //     num = 10;
        //     function fn1() {
        //         var num = 20;
        //         // console.log(num);  // 1 -->20
        //     }
        //     fn1();
        //     // console.log(num);  //2  -->10
        // }
        // fn();
        // console.log(num);  //3 --->10
        // var num = 10;
        // var num = 20;
        // console.log(num);


    </script>
</body>
</html>